# 7 整数翻转
# https://leetcode.cn/problems/reverse-integer/description/
# Date: 2024/10/30

def reverse(x: int) -> int:
    INT_MIN, INT_MAX = -2 ** 31, 2 ** 31 - 1
    sx, result = str(x), 0
    if sx[0] == "-":
        result = - int(sx[:0:-1])
    else:
        result = int(sx[::-1])
    if INT_MIN <= result <= INT_MAX:
        return result
    else:
        return 0


def reverse_ofc(x: int) -> int:
    """官方题解"""
    INT_MIN, INT_MAX = -2 ** 31, 2 ** 31 - 1
    rev = 0
    while x != 0:
        # INT_MIN 也是一个负数，不能写成 rev < INT_MIN // 10
        if rev < INT_MIN // 10 + 1 or rev > INT_MAX // 10:
            return 0
        digit = x % 10
        # Python3 的取模运算在 x 为负数时也会返回 [0, 9) 以内的结果，因此这里需要进行特殊判断
        if x < 0 < digit:
            digit -= 10

        # 同理，Python3 的整数除法在 x 为负数时会向下（更小的负数）取整，因此不能写成 x //= 10
        x = (x - digit) // 10
        rev = rev * 10 + digit

    return rev


if __name__ == '__main__':
    print(2 ** 31 > 2147483651)
    print(reverse(-112))
    print(reverse(123))
    print(reverse(120))
    print(reverse(0))
